home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MACD 5
/
MACD 5.bin
/
magazyn_amiga
/
4
/
ami052_amos i fonty.txt
< prev
next >
Wrap
Text File
|
1997-09-14
|
6KB
|
229 lines
AMOS I FONTY
<lead>Gdy zapytaê uûytkownika AMOS-a, jaka jest najwiëksza wada
tego jëzyka, bez wahania odpowie, ûe jest niâ jego powolnoôê.
Wedîug mnie jest inaczej. Najwiëkszâ bolâczkâ AMOS-a sâ kîopoty z
uûyciem wielu róûnych czcionek.
<a>Mariusz Sikorski
<txt>Nie jest to moûe aû tak bardzo zauwaûalne, jeôli uûywa sië
jedynie kilku fontów w caîym programie. Lecz jeôli zajdzie
potrzeba szybkiej zmiany czcionki wiele razy, np. na tej samej
stronie, tak jak to jest w magazynach dyskowych, to co wtedy?
<sr>Wstëp
<txt>Jeûeli chcemy uûyê czcionki w AMOS-ie, musimy najpierw
wczytaê listë fontów. Sîuûâ do tego instrukcje:
<l>
Get Rom Fonts -- lista czcionek rezydentnych
Get Disc Font -- lista czcionek z katalogu Fonts
Get Fonts -- lista wszystkich fontów
<txt>Dwie ostatnie funkcje umoûliwiajâ udostëpnienie fontów z
dowolnego katalogu, który jednak naleûy zaasygnowaê jako >Fonts:<
(ASSIGN katalog FONTS:). Instrukcja tworzâca listë fontów powinna
byê uûyta tylko raz, najlepiej na poczâtku programu. Do
poszczególnych czcionek odwoîujemy sië za pomocâ
przyporzâdkowanych im numerów.
<l>
=Font$(n)
<txt>Powyûsza funkcja zwraca ciâg tekstowy o dîugoôci 38 znaków,
opisujâcy dany font o numerze >n<. Oto znaczenie poszczególnych
znaków tego ciâgu:
<przyp>
od 1 do 29 nazwa czcionki
od 30 do 33 rozmiar czcionki
od 34 do 37 informacja o pochodzeniu czcionki ('ROM' lub 'DISK')
<txt>Do zmiany fontu sîuûy instrukcja: >Set Font n<, gdzie n jest
numerem czcionki z utworzonej listy. O tym wszystkim moûna
przeczytaê w kaûdej instrukcji do AMOS-a i ksiâûce o nim.
<sr>Wada
<txt>Wielkâ wadâ AMOS-a jest to, ûe przy kaûdej zmianie fontu,
font ten jest doczytywany z dysku (ROM-u). Zapewne niejeden z
Was, drodzy Czytelnicy, przeûyî sytuacjë, gdy dysk rzëziî jak
najëty, a fonty zmieniaîy sië w ôlimaczym tempie. Póúniej ktoô
wpadî na pomysî, aby w RAM DYSK-u trzymaê potrzebne czcionki i z
niego je odczytywaê. Jeden dobrze uûyty ASSIGN zaîatwiaî sprawë.
To rozwiâzanie moûna byîo uznaê za rewolucyjne, ale miaîo jednâ
wadë. Przed uûyciem naleûaîo przekopiowaê do RAM DYSK-u wszystkie
potrzebne czcionki.
Proponujë inne rozwiâzanie. Otóû za pomocâ biblioteki systemowej
'diskfont.library' moûna dopisaê potrzebny font do listy fontów
rezydentnych.
<l>
Procedure OTWORZ_FONT[NAME$,ROZMIAR]
BLAD=0
' czy nazwa z koïcówkâ .font?
If Lower$(Right$(NAZWA$,5))<>'.font'
NAZWA$=NAZWA$+'.font'
End If
' dla systemu dodajemy 0
NAZWA$=NAZWA$+Chr$(0)
' przydzielamy pamiëê 7 bajtów
Dreg(0)=7 : Dreg(1)=0
ADRES=Execall(-198)
If ADRES=0 Then BLAD=24
` wpisujemy odpowiednie dane do struktury
Loke ADR,Varptr(NAZWA$)
Doke ADRES+4,ROZMIAR
Doke ADRES+6,0
Areg(0)=ADRES
` OpenFont: inicjujemy font
FONT=Gfxcall(-72)
If FONT=0
Lib Open 1,"diskfont.library",0
Areg(0)=ADRES : Areg(1)=ADRES
' OpenNewFont: do listy systemowych
FONT=Lib Call(1,-30)
If FONT=0 : BLAD=44 : End If
Lib Close 1
Else
BLAD=44
End If
' jeôli ADRES<>0 zwalniamy pamiëê
If ADRES
Areg(1)=ADRES
Dreg(0)=7
X=Execall(-210)
End If
' znajdujemy numer fontu na liôcie
If BLAD=0
Get Rom Fonts
FONT=0
N$=Upper$(Left$(NAZWA$,Len(NAZWA$)-6))
Repeat
Inc FONT
A$=Upper$(Font$(FONT))
A$=Left$(A$,Instr(A$,'.FONT')-1)
A=Val(Mid$(Font$(FONT),31,5))
Until(A$=N$ and A=ROZMIAR) or(A$='')
Else
' wywoîujemy bîâd AMOS-a numer BLAD
Error BLAD
End If
End Proc[FONT]
<txt>Jako parametry naleûy podaê nazwë fontu i rozmiar. W
odpowiedzi otrzymujemy numer fontu z listy fontów rezydentnych.
Procedura dziaîa nastëpujâco: sprawdza, czy podana nazwa czcionki
ma rozszerzenie .font, jeûeli nie -- jest ono dopisywane.
Nastëpnie przydziela 7 bajtów pamiëci do otworzenia nowego fontu.
Te 7 bajtów jest wypeînianych nastëpujâcymi danymi:
<przyp>bajty 1-4 adres pamiëci zawierajâcy nazwë czcionki,
bajty 5-6 rozmiar czcionki,
bajt 7 = 0.
<txt>Za pomocâ procedury >OpenFont< z graphics.library inicjujemy
nowy font. Jeûeli taki font (o danym rozmiarze) dostëpny jest w
katalogu >Fonts:<, za pomocâ procedury >OpenNewFont< z
'diskfont.library' dopisujemy nowâ czcionkë do listy fontów
systemowych.
Teraz juû z górki, zwalniamy pamiëê 7 bajtów i sprawdzamy, jaki
nasz nowy font ma numer, na liôcie utworzonej za pomocâ rozkazu
>Get Rom Fonts<. Numer ten jest wyprowadzony z procedury jako
zmienna FONT. Naleûy sië jeszcze kilka sîów wyjaônienia co do
autorstwa procedury. Autorem pierwowzoru jest Andrew Church.
Przedstawiona przeze mnie wersja jest o poîowë krótsza i
skuteczniejsza.
Jako zadanie domowe proponujë dopisanie do procedury opcji
usuwania zbëdnych fontów. Nie jest to zadanie zbyt trudne. W
bibliotece graphics.library jest procedura o nazwie >CloseFont<,
jej przesuniëcie wzglëdem bazy to -78 (dziesiëtnie), a jako
parametry naleûy zaîadowaê do rejestru >A1< informacje o foncie.
Mam nadziejë, ûe teraz juû nie bëdziecie mieli kîopotów z
fontami.
Jeûeli bëdziecie mieli jakieô pytania czy wâtpliwoôci, to proszë
o listy do redakcji lub, jeôli macie dostëp do Internetu, to o
mail-e bezpoôrednio do mnie pod adresem:
<przyp>maksiu@safona.mech.tuniv.szczecin.pl
<r>Od Krzysztofa Prusika:
Kurs AMOS-a otwarty jest dla wszystkich, którzy opiszâ ciekawie
pewien temat, dotyczâcy tego jëzyka programowania (jednak zwykle
taki artykuî czekajâ niewielkie poprawki redakcyjne).
Ostatnio przebywajâc na kanale #AmigaPL, usîyszaîem wiele
interesujâcych opini o AMOS-ie. Cóû, jëzyk ten chyba wzbudza
emocje. Usîyszaîem teû wiele przeciwstawnych opinii na temat
mojego kursu. Czytelnicy MA, apelujë do Was. Piszcie listy
opisujâce to, co Was bardziej interesuje. Wolicie problemy
abstrakcyjne (które moûna wykorzystaê równieû w innych jëzykach
programowania), czy teû porady praktyczne (jak w AMOS-ie zrobiê
to i to). Do tej pory staraîem sië wypoôrodkowywaê te dwie
sprawy, ale jeôli Wasze zdanie przewaûy szalë, to sië dostosujë.
Wszak piszë dla Was.